package day16.myreflect04;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author Xiao
 * @date 2021/8/10
 */
public class MethodDemo02 {
    /**
     * 利用Method运行方法
     * 	Object invoke(Object obj, Object... args)：运行方法
     *          参数一：用obj对象调用该方法；
     *          参数二：调用方法的传递的参数（如果没有就不写）；
     *          返回值：方法的返回值（如果没有返回值，则返回null，可不写）。
     *          注意：如果方法是非public的，当权限不够（或者不确定权限够不够）时需要临时取消检查，
     *               然后再运行方法：setAccessible(boolean) 暴力反射。
     */
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Class<?> clazz = Class.forName("day16.myreflect04.Student04");
        Student04 stu = new Student04("阿良", 24);
        Method show = clazz.getDeclaredMethod("show");
        Method show1 = clazz.getMethod("show1");
        Method show2 = clazz.getMethod("show2", String.class);
        Method show3 = clazz.getMethod("show3", int.class, int.class);
        //取消检查
        show.setAccessible(true);
        Object result = show.invoke(stu);//null
        show1.invoke(stu);//null
        show2.invoke(stu, "平安");//null
        int sum = (int) show3.invoke(stu, 10, 20);//30
        System.out.println(result);
        System.out.println(sum);
    }
}
